package cn.tedu.yxcar.product.service;

import cn.tedu.yxcar.product.pojo.dto.ArticleAddDTO;
import cn.tedu.yxcar.product.pojo.dto.ArticleUpdateDTO;
import cn.tedu.yxcar.product.pojo.vo.ArticleDetailsVO;
import cn.tedu.yxcar.product.pojo.vo.ArticleListVO;
import cn.tedu.yxcar.product.pojo.vo.ArticleSearchVO;
import cn.tedu.yxcar.product.pojo.vo.AuthorInfoVO;
import cn.tedu.yxcar.product.web.JsonPage;

import java.util.List;

/**
 * <p>
 * 处理文章的业务接口
 * </p>
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
public interface IArticleService {
    /**
     * 发表文章
     *
     * @param articleAddDTO 文章数据
     */
    void insert(ArticleAddDTO articleAddDTO);

    /**
     * 根据id删除文章
     *
     * @param id 文章id
     */
    void deleteById(Long id);

    /**
     * 修改文章详情
     *
     * @param id               尝试修改的文章的ID
     * @param articleUpdateDTO 文章的新数据
     */
    void updateInfoById(Long id, ArticleUpdateDTO articleUpdateDTO);

    /**
     * 根据id查询文章数据详情
     *
     * @param id 文章id
     * @return 匹配的文章数据详情，如果没有匹配的数据，将抛出异常
     */
    ArticleDetailsVO getStandardById(Long id);

    /**
     * 根据用户id查询作者信息
     *
     * @param userId 用户id
     * @return 匹配的用户信息
     */
    AuthorInfoVO getAuthorInfoByUserId(Long userId);

    /**
     * 查询文章列表
     *
     * @return 文章列表
     */
    List<ArticleListVO> list();

    /**
     * 修改浏览量
     */
    void updateViewCountById(Long id);

    /**
     * 通过关键字查询文章
     *
     * @param keywords 关键字
     * @return 文章数据列表
     */
    List<ArticleSearchVO> listSearchByKeywords(String keywords);
}
